MySQL 5.6
[HY000][1366] Incorrect string value
异常。
原因
普通的汉字使用 utf8
表示占位是三个字节,特殊情况下可能会用到 utf8
四字节的情况。 MySQL-5.5.3
之前的版本是不支持四字节 utf8
字符的,之后的版本可以通过 utf8mb4
使用四字节 utf8
编码。
解决方案
- 首先升级
MySQL
到5.5.3
之后的版本。 - 关闭
MySQL
的服务,并且修改配置文件。(这个是为了以后重启数据库不会改变数据库配置)
1 | [client] |
- 修改对应的字符编码(可以掠过第二步直接设置,但是重启会被修改回来)
1 | -- 任何一个只要不是 utf8mb4 就修改一下,正常应该是不用修改的。 |
- 修改对应数据库、表、字段编码
1 | alter database test character set utf8mb4 collate utf8mb4_general_ci; |
- 连接数据库的时候不要使用
characterEncoding=utf8
测试
1 | -- 可以向数据库插入这个字符 检查是否成功 |
总结经验
推广一下其实这样可以解决大部分字符编码的问题,不管是转换成 gbk
还是任何编码。像是由于其他问题导致的这个异常都可以通过修改成 utf8
的方式解决,但对于移动端的一些特殊字符,仅仅三个字节的 utf8
已经不能满足需求,所以才会使用 utf8mb4
这种编码。
其他问题
windows上mysql配置文件的位置
安装版本mysql启动都会有个配置参数,可以检查一下启动项的快捷方式:
1 | "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" "--defaults-file=C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" "-uroot" "-p" |
免安装版本在安装到系统服务或者启动的时候,都会设置一个配置文件路径 mysqld install MySQL --defaults-file="D:\mysql-5.6.16-win32\my.ini"
如果是自动安装或者别人安装的话,可以直接在服务里增加启动参数:"--defaults-file=C:\ProgramData\MySQL\MySQL Server 5.7\my.ini"
,修改路径即可。
另附删除服务命令:mysqld remove